package demo.practice.leetcode_msjd;

public class Msjd0805 {

    public static void main(String[] args) {
        Msjd0805 msjd0805= new Msjd0805();
        msjd0805.multiply(-1,10);

    }
    public int multiply(int A, int B) {
        //3x4 = 3+3+3+3 =3+3 *2  （*2 可以视为位移）
        //1x10= 1+1+1+1+1 * 2   （*2 可以视为位移）
        //但要吝啬一点的意思是少做运算

        //1111 1+2+4+8=15    (2的n次方)-1

        //末尾为1了就不能 向 右边位移了，这样不整除2
        //最终的问题是：如何知道B的二进制的末尾是多少

        //判断偶数的方法，左移一位和右移一位相等
        //10 -> 5   （5个1相加）左移1位
        //最后一个问题就是  如果B为负数。java 二进制如何表示一个负数
        if(B==0)
            return 0;
        if (A==1)
            return B;
        if(B>>1<<1==B)
            return multiply(A,B>>1)<<1;
        else if(B>1)
            return A+multiply(A,B-1);
        else
            return A;
    }
}
